home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / unix / ctags.1 < prev    next >
Text File  |  1989-03-15  |  52KB  |  1,694 lines

  1. Path: xanth!nic.MR.NET!hal!cwjcc!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i061:  tags - make a tags file for an editor
  5. Message-ID: <12245@swan.ulowell.edu>
  6. Date: 15 Mar 89 19:50:40 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 1683
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: grwalter@watcgl.waterloo.edu (Fred Walter)
  12. Posting-number: Volume 89, Issue 61
  13. Archive-name: unix/ctags.1
  14.  
  15. #    This is a shell archive.
  16. #    Remove everything above and including the cut line.
  17. #    Then run the rest of the file through sh.
  18. #----cut here-----cut here-----cut here-----cut here----#
  19. #!/bin/sh
  20. # shar:    Shell Archiver
  21. #    Run the following text with /bin/sh to create:
  22. #    README
  23. #    ORIGINAL_POSTER
  24. #    Makefile
  25. #    ctags.1
  26. #    ctags.c
  27. #    ctags.uu
  28. #    tags
  29. # This archive created: Wed Mar 15 14:47:08 1989
  30. cat << \SHAR_EOF > README
  31. /*
  32.  * The original of this version came over usenet (mod.sources Nov85).
  33.  * I also applied the bug fix mentioned in comp.bugs.4bsd Mar88.
  34.  *
  35.  * This was compiled with Lattice C 5.0
  36.  *
  37.  * G. R. Walter (Fred) February 29, 1989
  38.  */
  39. SHAR_EOF
  40. cat << \SHAR_EOF > ORIGINAL_POSTER
  41. Relay-Version: version B 2.10.2 9/18/84; site watmath.UUCP
  42. Posting-Version: version B 2.10.2 9/3/84; site panda.UUCP
  43. Path: watmath!clyde!burl!ulysses!allegra!mit-eddie!genrad!panda!sources-request
  44. From: sources-request@panda.UUCP
  45. Newsgroups: mod.sources
  46. Subject: ctags source
  47. Message-ID: <1145@panda.UUCP>
  48. Date: 30 Nov 85 18:21:54 GMT
  49. Date-Received: 1 Dec 85 04:02:09 GMT
  50. Sender: jpn@panda.UUCP
  51. Lines: 1184
  52. Approved: jpn@panda.UUCP
  53.  
  54. Mod.sources:  Volume 3, Issue 53
  55. Submitted by: ucbvax!ucsf-cgl.ARPA!arnold (Ken Arnold)
  56.  
  57.  
  58. #!/bin/sh
  59. #
  60. # I have received enough requests for the current source to ctags to
  61. # post it.  Here is the latest version (what will go out with 4.3,
  62. # modulo any bugs fixed during the beta period).  It is the 4.2 ctags
  63. # with recognition of yacc and lex tags added.  Files ending in .y are
  64. # presumed to be yacc files, .l files are either lisp or lex files,
  65. # depending upon the first non-blank character (yeah, it's a hack, but
  66. # it works).  Man page is included.  Note that I wrote the original
  67. # ctags (recognized only C), and added the YACC and lex after others
  68. # wrote the recognizers for FORTRAN, PASCAL, and lisp, so this code is
  69. # rather a mix of styles, for which I take no responsibility.  So, here
  70. # come those famous words:
  71. SHAR_EOF
  72. cat << \SHAR_EOF > Makefile
  73. #
  74. # Makefile for Lattice C 5.0 on Amiga
  75. #
  76.  
  77. .c.o:
  78.     lc $(CFLAGS) $<
  79.  
  80. CFLAGS = -cw -O
  81. LINKFLAGS = NODEBUG
  82. LIBS = lib:lc.lib
  83.  
  84. all: ctags
  85.     say "done all"
  86.  
  87. ctags: ctags.o
  88.     BLINK TO ctags FROM lib:cres.o ctags.o LIBRARY $(LIBS) $(LINKFLAGS)
  89.  
  90. clean:
  91.     delete ctags.o ctags
  92. SHAR_EOF
  93. cat << \SHAR_EOF > ctags.1
  94. .TH CTAGS 1 "25 August 1982"
  95. .UC 4
  96. .SH NAME
  97. ctags \- create a tags file
  98. .SH SYNOPSIS
  99. .B ctags
  100. .B \-BFatuwvx
  101. ]
  102. name ...
  103. .SH DESCRIPTION
  104. .I Ctags
  105. makes a tags file for
  106. .IR ex (1)
  107. from the specified C, Pascal, Fortran, YACC, lex, and lisp sources.
  108. A tags file gives the locations of specified objects (in this case
  109. functions and typedefs) in a group of files.  Each line of the tags
  110. file contains the object name, the file in which it is defined, and
  111. an address specification for the object definition. Functions are
  112. searched with a pattern, typedefs with a line number. Specifiers are
  113. given in separate fields on the line, separated by blanks or tabs.
  114. Using the
  115. .I tags
  116. file,
  117. .I ex
  118. can quickly find these objects definitions.
  119. .PP
  120. If the
  121. .B \-x
  122. flag is given, 
  123. .I ctags
  124. produces a list of object names, the line number and file
  125. name on which each is defined, as well as the text of that line
  126. and prints this on the standard output.  This is a simple index
  127. which can be printed out as an off-line readable function index.
  128. .PP
  129. If the
  130. .B \-v
  131. flag is given,
  132. an index of the form expected by
  133. .IR vgrind (1)
  134. is produced on the standard output.
  135. This listing contains the function name,
  136. file name, and page number
  137. (assuming 64 line pages).
  138. Since the output will be sorted into lexicographic order,
  139. it may be desired to run the output through
  140. .BR "sort \-f" .
  141. Sample use:
  142. .nf
  143.     ctags \-v files | sort \-f > index
  144.     vgrind \-x index
  145. .fi
  146. .PP
  147. Files whose names end in 
  148. .B \.c
  149. or
  150. .B \.h
  151. are assumed to be C source files and are searched for C routine and
  152. macro definitions.
  153. Files whose names end in
  154. .B \.y
  155. are assumed to be YACC source files.
  156. Files whose names end in
  157. .B \.l
  158. are assumed to be either lisp files
  159. if their first non-blank character is `;', `(', or `[',
  160. or lex files otherwise.
  161. Other files are first examined to see if they contain any Pascal or
  162. Fortran routine definitions; if not, they are processed again
  163. looking for C definitions.
  164. .PP
  165. Other options are:
  166. .TP 5
  167. .B \-F
  168. use forward searching patterns (/.../) (default).
  169. .TP 5
  170. .B \-B
  171. use backward searching patterns (?...?).
  172. .TP 5
  173. .B \-a
  174. append to tags file.
  175. .TP 5
  176. .B \-t
  177. create tags for typedefs.
  178. .TP 5
  179. .B \-w
  180. suppressing warning diagnostics.
  181. .TP 5
  182. .B \-u
  183. causing the specified files to be
  184. .I updated
  185. in tags, that is, all references to them are deleted,
  186. and the new values are appended to the file.
  187. (Beware: this option is implemented in a way which is rather slow;
  188. it is usually faster to simply rebuild the
  189. .I tags
  190. file.)
  191. .PP
  192. The tag
  193. .I main
  194. is treated specially in C programs.
  195. The tag formed is created by prepending
  196. .I M
  197. to the name of the file, with a trailing .c removed, if
  198. any, and leading pathname components also removed.
  199. This makes use of
  200. .I ctags
  201. practical in directories with more than one program.
  202. .SH FILES
  203. .DT
  204. tags        output tags file
  205. .SH SEE ALSO
  206. ex(1), vi(1)
  207. .SH AUTHOR
  208. Ken Arnold; FORTRAN added by Jim Kleckner; Bill Joy
  209. added Pascal and
  210. .B \-x,
  211. replacing
  212. .I cxref;
  213. C typedefs added by Ed Pelegri-Llopart.
  214. .SH BUGS
  215. Recognition of \fBfunctions\fR, \fBsubroutines\fR and \fBprocedures\fR
  216. for FORTRAN and Pascal is done is a very simpleminded way.
  217. No attempt is made to deal with block structure; if you have two
  218. Pascal procedures in different blocks with the same name you lose.
  219. .PP
  220. The method of deciding whether to look for C or Pascal and FORTRAN
  221. functions is a hack.
  222. .PP
  223. Does not know about #ifdefs.
  224. .PP
  225. Should know about Pascal types.
  226. Relies on the input being well formed to detect typedefs.
  227. Use of -tx shows only the last line of typedefs.
  228. SHAR_EOF
  229. cat << \SHAR_EOF > ctags.c
  230. /* $Header */
  231.  
  232. static char *sccsid = "@(#)ctags.c    4.7 (Berkeley) 8/18/83";
  233.  
  234. #include <stdio.h>
  235. #include <ctype.h>
  236.  
  237. /*
  238.  * ctags: create a tags file
  239.  */
  240.  
  241. #define    reg    register
  242. #define    bool    char
  243.  
  244. #define    TRUE    (1)
  245. #define    FALSE    (0)
  246.  
  247. #define    iswhite(arg)    (_wht[arg])    /* T if char is white        */
  248. #define    begtoken(arg)    (_btk[arg])    /* T if char can start token    */
  249. #define    intoken(arg)    (_itk[arg])    /* T if char can be in token    */
  250. #define    endtoken(arg)    (_etk[arg])    /* T if char ends tokens    */
  251. #define    isgood(arg)    (_gd[arg])    /* T if char can be after ')'    */
  252.  
  253. /*
  254.  * The following ifndefs were necessary to get this to compile on an Amiga.
  255.  * The original of this version came over usenet (mod.sources Nov85).
  256.  * I also applied the bug fix mentioned in comp.bugs.4bsd Mar88.
  257.  *
  258.  * Compile with Amiga Lattice C using : lc -cw -L ctags
  259.  *
  260.  * G. R. Walter (Fred) December 30, 1988
  261.  */
  262. #ifndef AMIGA
  263. # define    max(I1,I2)    (I1 > I2 ? I1 : I2)
  264. #endif
  265. #ifdef AMIGA
  266. # define entry EnTrY
  267. # define index(S, C) strchr(S, C)
  268. # define cfree(C) free(C)
  269. #endif
  270.  
  271. struct    nd_st {                 /* sorting structure        */
  272.     char    *entry;            /* function or type name    */
  273.     char    *file;            /* file name            */
  274.     bool    f;            /* use pattern or line no    */
  275.     int    lno;            /* for -x option        */
  276.     char    *pat;            /* search pattern        */
  277.     bool    been_warned;        /* set if noticed dup        */
  278.     struct    nd_st    *left,*right;    /* left and right sons        */
  279. };
  280.  
  281. long    ftell();
  282. typedef    struct    nd_st    NODE;
  283.  
  284. bool    number,                /* T if on line starting with #    */
  285.     term    = FALSE,        /* T if print on terminal    */
  286.     makefile= TRUE,            /* T if to creat "tags" file    */
  287.     gotone,                /* found a func already on line    */
  288.                     /* boolean "func" (see init)    */
  289.     _wht[0177],_etk[0177],_itk[0177],_btk[0177],_gd[0177];
  290.  
  291.     /* typedefs are recognized using a simple finite automata,
  292.      * tydef is its state variable.
  293.      */
  294. typedef enum {none, begin, middle, end } TYST;
  295.  
  296. TYST tydef = none;
  297.  
  298. char    searchar = '/';            /* use /.../ searches         */
  299.  
  300. int    lineno;                /* line number of current line */
  301. char    line[4*BUFSIZ],        /* current input line            */
  302.     *curfile,        /* current input file name        */
  303.     *outfile= "tags",    /* output file                */
  304.     *white    = " \f\t\n",    /* white chars                */
  305.     *endtk    = " \t\n\"'#()[]{}=-+%*/&|^~!<>;,.:?",
  306.                 /* token ending chars            */
  307.     *begtk    = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz",
  308.                 /* token starting chars            */
  309.     *intk    = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz0123456789",
  310.                 /* valid in-token chars            */
  311.     *notgd    = ",;";        /* non-valid after-function chars    */
  312.  
  313. int    file_num;        /* current file number            */
  314. int    aflag;            /* -a: append to tags */
  315. int    tflag;            /* -t: create tags for typedefs */
  316. int    uflag;            /* -u: update tags */
  317. int    wflag;            /* -w: suppress warnings */
  318. int    vflag;            /* -v: create vgrind style index output */
  319. int    xflag;            /* -x: create cxref style output */
  320.  
  321. char    lbuf[BUFSIZ];
  322.  
  323. FILE    *inf,            /* ioptr for current input file        */
  324.     *outf;            /* ioptr for tags file            */
  325.  
  326. long    lineftell;        /* ftell after getc( inf ) == '\n'     */
  327.  
  328. NODE    *head;            /* the head of the sorted binary tree    */
  329.  
  330. char    *savestr();
  331. #ifdef AMIGA
  332. char    *rindex(), *strchr();
  333. #else
  334. char    *rindex(), *index();
  335. #endif
  336. char    *toss_comment();
  337.  
  338. main(ac,av)
  339. int    ac;
  340. char    *av[];
  341. {
  342.     char cmd[100];
  343.     int i;
  344.  
  345.     while (ac > 1 && av[1][0] == '-') {
  346.         for (i=1; av[1][i]; i++) {
  347.             switch(av[1][i]) {
  348.               case 'B':
  349.                 searchar='?';
  350.                 break;
  351.               case 'F':
  352.                 searchar='/';
  353.                 break;
  354.               case 'a':
  355.                 aflag++;
  356.                 break;
  357.               case 't':
  358.                 tflag++;
  359.                 break;
  360.               case 'u':
  361.                 uflag++;
  362.                 break;
  363.               case 'w':
  364.                 wflag++;
  365.                 break;
  366.               case 'v':
  367.                 vflag++;
  368.                 xflag++;
  369.                 break;
  370.               case 'x':
  371.                 xflag++;
  372.                 break;
  373.               default:
  374.                 goto usage;
  375.         }
  376.         }
  377.         ac--; av++;
  378.     }
  379.  
  380.     if (ac <= 1) {
  381. usage:
  382.         printf("Usage: ctags [-BFatuwvx] file ...\n");
  383.         exit(1);
  384.     }
  385.  
  386.     init();            /* set up boolean "functions"        */
  387.     /*
  388.      * loop through files finding functions
  389.      */
  390.     for (file_num = 1; file_num < ac; file_num++)
  391.         find_entries(av[file_num]);
  392.  
  393.     if (xflag) {
  394.         put_entries(head);
  395.         exit(0);
  396.     }
  397.     if (uflag) {
  398.         for (i=1; i<ac; i++) {
  399.             sprintf(cmd,
  400.                 "mv %s OTAGS;fgrep -v '\t%s\t' OTAGS >%s;rm OTAGS",
  401.                 outfile, av[i], outfile);
  402.             system(cmd);
  403.         }
  404.         aflag++;
  405.     }
  406.     outf = fopen(outfile, aflag ? "a" : "w");
  407.     if (outf == NULL) {
  408.         perror(outfile);
  409.         exit(1);
  410.     }
  411.     put_entries(head);
  412.     fclose(outf);
  413.     if (uflag) {
  414.         sprintf(cmd, "sort %s -o %s", outfile, outfile);
  415.         system(cmd);
  416.     }
  417.     exit(0);
  418. }
  419.  
  420. /*
  421.  * This routine sets up the boolean psuedo-functions which work
  422.  * by seting boolean flags dependent upon the corresponding character
  423.  * Every char which is NOT in that string is not a white char.  Therefore,
  424.  * all of the array "_wht" is set to FALSE, and then the elements
  425.  * subscripted by the chars in "white" are set to TRUE.  Thus "_wht"
  426.  * of a char is TRUE if it is the string "white", else FALSE.
  427.  */
  428. init()
  429. {
  430.  
  431.     reg    char    *sp;
  432.     reg    int    i;
  433.  
  434.     for (i = 0; i < 0177; i++) {
  435.         _wht[i] = _etk[i] = _itk[i] = _btk[i] = FALSE;
  436.         _gd[i] = TRUE;
  437.     }
  438.     for (sp = white; *sp; sp++)
  439.         _wht[*sp] = TRUE;
  440.     for (sp = endtk; *sp; sp++)
  441.         _etk[*sp] = TRUE;
  442.     for (sp = intk; *sp; sp++)
  443.         _itk[*sp] = TRUE;
  444.     for (sp = begtk; *sp; sp++)
  445.         _btk[*sp] = TRUE;
  446.     for (sp = notgd; *sp; sp++)
  447.         _gd[*sp] = FALSE;
  448. }
  449.  
  450. /*
  451.  * This routine opens the specified file and calls the function
  452.  * which finds the function and type definitions.
  453.  */
  454. find_entries(file)
  455. char    *file;
  456. {
  457.     char *cp;
  458.  
  459.     if ((inf = fopen(file,"r")) == NULL) {
  460.         perror(file);
  461.         return;
  462.     }
  463.     curfile = savestr(file);
  464.     lineno = 0;
  465.     cp = rindex(file, '.');
  466.     /* .l implies lisp or lex source code */
  467.     if (cp && cp[1] == 'l' && cp[2] == '\0') {
  468.         if (index(";([", first_char()) != NULL) {    /* lisp */
  469.             L_funcs(inf);
  470.             fclose(inf);
  471.             return;
  472.         }
  473.         else {                        /* lex */
  474.             /*
  475.              * throw away all the code before the second "%%"
  476.              */
  477.             toss_yysec();
  478.             getline();
  479.             pfnote("yylex", lineno, TRUE);
  480.             toss_yysec();
  481.             C_entries();
  482.             fclose(inf);
  483.             return;
  484.         }
  485.     }
  486.     /* .y implies a yacc file */
  487.     if (cp && cp[1] == 'y' && cp[2] == '\0') {
  488.         toss_yysec();
  489.         Y_entries();
  490.         C_entries();
  491.         fclose(inf);
  492.         return;
  493.     }
  494.     /* if not a .c or .h file, try fortran */
  495.     if (cp && (cp[1] != 'c' && cp[1] != 'h') && cp[2] == '\0') {
  496.         if (PF_funcs(inf) != 0) {
  497.             fclose(inf);
  498.             return;
  499.         }
  500.         rewind(inf);    /* no fortran tags found, try C */
  501.     }
  502.     C_entries();
  503.     fclose(inf);
  504. }
  505.  
  506. pfnote(name, ln, f)
  507. char    *name;
  508. int    ln;
  509. bool    f;        /* f == TRUE when function */
  510. {
  511.     register char *fp;
  512.     register NODE *np;
  513.     char nbuf[BUFSIZ];
  514.  
  515.     if ((np = (NODE *) malloc(sizeof (NODE))) == NULL) {
  516.         fprintf(stderr, "ctags: too many entries to sort\n");
  517.         put_entries(head);
  518.         free_tree(head);
  519.         head = np = (NODE *) malloc(sizeof (NODE));
  520.     }
  521.     if (xflag == 0 && !strcmp(name, "main")) {
  522.         fp = rindex(curfile, '/');
  523.         if (fp == 0)
  524.             fp = curfile;
  525.         else
  526.             fp++;
  527.         sprintf(nbuf, "M%s", fp);
  528.         fp = rindex(nbuf, '.');
  529.         if (fp && fp[2] == 0)
  530.             *fp = 0;
  531.         name = nbuf;
  532.     }
  533.     np->entry = savestr(name);
  534.     np->file = curfile;
  535.     np->f = f;
  536.     np->lno = ln;
  537.     np->left = np->right = 0;
  538.     if (xflag == 0) {
  539.         lbuf[50] = 0;
  540.         strcat(lbuf, "$");
  541.         lbuf[50] = 0;
  542.     }
  543.     np->pat = savestr(lbuf);
  544.     if (head == NULL)
  545.         head = np;
  546.     else
  547.         add_node(np, head);
  548. }
  549.  
  550. /*
  551.  * This routine finds functions and typedefs in C syntax and adds them
  552.  * to the list.
  553.  */
  554. C_entries()
  555. {
  556.     register int c;
  557.     register char *token, *tp;
  558.     bool incomm, inquote, inchar, midtoken;
  559.     int level;
  560.     char *sp;
  561.     char tok[BUFSIZ];
  562.  
  563.     number = gotone = midtoken = inquote = inchar = incomm = FALSE;
  564.     level = 0;
  565.     sp = tp = token = line;
  566.     lineno++;
  567.     lineftell = ftell(inf);
  568.     for (;;) {
  569.         *sp = c = getc(inf);
  570.         if (feof(inf))
  571.             break;
  572.         if (c == '\n')
  573.             lineno++;
  574.         else if (c == '\\') {
  575.             c = *++sp = getc(inf);
  576.             if (c == '\n')
  577.                 c = ' ';
  578.         }
  579.         else if (incomm) {
  580.             if (c == '*') {
  581.                 while ((*++sp=c=getc(inf)) == '*')
  582.                     continue;
  583.                 if (c == '\n')
  584.                     lineno++;
  585.                 if (c == '/')
  586.                     incomm = FALSE;
  587.             }
  588.         }
  589.         else if (inquote) {
  590.             /*
  591.              * Too dumb to know about \" not being magic, but
  592.              * they usually occur in pairs anyway.
  593.              */
  594.             if (c == '"')
  595.                 inquote = FALSE;
  596.             continue;
  597.         }
  598.         else if (inchar) {
  599.             if (c == '\'')
  600.                 inchar = FALSE;
  601.             continue;
  602.         }
  603.         else switch (c) {
  604.           case '"':
  605.             inquote = TRUE;
  606.             continue;
  607.           case '\'':
  608.             inchar = TRUE;
  609.             continue;
  610.           case '/':
  611.             if ((*++sp=c=getc(inf)) == '*')
  612.                 incomm = TRUE;
  613.             else
  614.                 ungetc(*sp, inf);
  615.             continue;
  616.           case '#':
  617.             if (sp == line)
  618.                 number = TRUE;
  619.             continue;
  620.           case '{':
  621.             if (tydef == begin) {
  622.                 tydef=middle;
  623.             }
  624.             level++;
  625.             continue;
  626.           case '}':
  627.             if (sp == line)
  628.                 level = 0;    /* reset */
  629.             else
  630.                 level--;
  631.             if (!level && tydef==middle) {
  632.                 tydef=end;
  633.             }
  634.             continue;
  635.         }
  636.         if (!level && !inquote && !incomm && gotone == FALSE) {
  637.             if (midtoken) {
  638.                 if (endtoken(c)) {
  639.                     int f;
  640.                     int pfline = lineno;
  641.                     if (start_entry(&sp,token,tp,&f)) {
  642.                         strncpy(tok,token,tp-token+1);
  643.                         tok[tp-token+1] = 0;
  644.                         getline();
  645.                         pfnote(tok, pfline, f);
  646.                         gotone = f;    /* function */
  647.                     }
  648.                     midtoken = FALSE;
  649.                     token = sp;
  650.                 }
  651.                 else if (intoken(c))
  652.                     tp++;
  653.             }
  654.             else if (begtoken(c)) {
  655.                 token = tp = sp;
  656.                 midtoken = TRUE;
  657.             }
  658.         }
  659.         if (c == ';'  &&  tydef==end)    /* clean with typedefs */
  660.             tydef=none;
  661.         sp++;
  662.         if (c == '\n' || sp > &line[sizeof (line) - BUFSIZ]) {
  663.             tp = token = sp = line;
  664.             lineftell = ftell(inf);
  665.             number = gotone = midtoken = inquote = inchar = FALSE;
  666.         }
  667.     }
  668. }
  669.  
  670. /*
  671.  * This routine  checks to see if the current token is
  672.  * at the start of a function, or corresponds to a typedef
  673.  * It updates the input line * so that the '(' will be
  674.  * in it when it returns.
  675.  */
  676. start_entry(lp,token,tp,f)
  677. char    **lp,*token,*tp;
  678. int    *f;
  679. {
  680.     reg    char    c,*sp;
  681.     static    bool    found;
  682.     bool    firsttok;        /* T if have seen first token in ()'s */
  683.     int    bad;
  684.  
  685.     *f = 1;            /* a function */
  686.     sp = *lp;
  687.     c = *sp;
  688.     bad = FALSE;
  689.     if (!number) {        /* space is not allowed in macro defs    */
  690.         while (iswhite(c)) {
  691.             *++sp = c = getc(inf);
  692.             if (c == '\n') {
  693.                 lineno++;
  694.                 if (sp > &line[sizeof (line) - BUFSIZ])
  695.                     goto ret;
  696.             }
  697.         }
  698.     /* the following tries to make it so that a #define a b(c)    */
  699.     /* doesn't count as a define of b.                */
  700.     }
  701.     else {
  702.         if (!strncmp(token, "define", 6))
  703.             found = 0;
  704.         else
  705.             found++;
  706.         if (found >= 2) {
  707.             gotone = TRUE;
  708. badone:            bad = TRUE;
  709.             goto ret;
  710.         }
  711.     }
  712.     /* check for the typedef cases        */
  713.     if (tflag && !strncmp(token, "typedef", 7)) {
  714.         tydef=begin;
  715.         goto badone;
  716.     }
  717.     if (tydef==begin && (!strncmp(token, "struct", 6) ||
  718.         !strncmp(token, "union", 5) || !strncmp(token, "enum", 4))) {
  719.         goto badone;
  720.     }
  721.     if (tydef==begin) {
  722.         tydef=end;
  723.         goto badone;
  724.     }
  725.     if (tydef==end) {
  726.         *f = 0;
  727.         goto ret;
  728.     }
  729.     if (c != '(')
  730.         goto badone;
  731.     firsttok = FALSE;
  732.     while ((*++sp=c=getc(inf)) != ')') {
  733.         if (c == '\n') {
  734.             lineno++;
  735.             if (sp > &line[sizeof (line) - BUFSIZ])
  736.                 goto ret;
  737.         }
  738.         /*
  739.          * This line used to confuse ctags:
  740.          *    int    (*oldhup)();
  741.          * This fixes it. A nonwhite char before the first
  742.          * token, other than a / (in case of a comment in there)
  743.          * makes this not a declaration.
  744.          */
  745.         if (begtoken(c) || c=='/')
  746.             firsttok++;
  747.         else if (!iswhite(c) && !firsttok)
  748.             goto badone;
  749.     }
  750.     while (iswhite(*++sp=c=getc(inf)))
  751.         if (c == '\n') {
  752.             lineno++;
  753.             if (sp > &line[sizeof (line) - BUFSIZ])
  754.                 break;
  755.         }
  756. ret:
  757.     *lp = --sp;
  758.     if (c == '\n')
  759.         lineno--;
  760.     ungetc(c,inf);
  761.     return !bad && (!*f || isgood(c));
  762.                     /* hack for typedefs */
  763. }
  764.  
  765. /*
  766.  * Y_entries:
  767.  *    Find the yacc tags and put them in.
  768.  */
  769. Y_entries()
  770. {
  771.     register char    *sp, *orig_sp;
  772.     register int    brace;
  773.     register bool    in_rule, toklen;
  774.     char        tok[BUFSIZ];
  775.  
  776.     brace = 0;
  777.     getline();
  778.     pfnote("yyparse", lineno, TRUE);
  779.     while (fgets(line, sizeof line, inf) != NULL)
  780.         for (sp = line; *sp; sp++)
  781.             switch (*sp) {
  782.               case '\n':
  783.                 lineno++;
  784.                 /* FALLTHROUGH */
  785.               case ' ':
  786.               case '\t':
  787.               case '\f':
  788.               case '\r':
  789.                 break;
  790.               case '"':
  791.                 do {
  792.                     while (*++sp != '"')
  793.                         continue;
  794.                 } while (sp[-1] == '\\');
  795.                 break;
  796.               case '\'':
  797.                 do {
  798.                     while (*++sp != '\'')
  799.                         continue;
  800.                 } while (sp[-1] == '\\');
  801.                 break;
  802.               case '/':
  803.                 if (*++sp == '*')
  804.                     sp = toss_comment(sp);
  805.                 else
  806.                     --sp;
  807.                 break;
  808.               case '{':
  809.                 brace++;
  810.                 break;
  811.               case '}':
  812.                 brace--;
  813.                 break;
  814.               case '%':
  815.                 if (sp[1] == '%' && sp == line)
  816.                     return;
  817.                 break;
  818.               case '|':
  819.               case ';':
  820.                 in_rule = FALSE;
  821.                 break;
  822.               default:
  823.                 if (brace == 0  && !in_rule && (isalpha(*sp) ||
  824.                                 *sp == '.' ||
  825.                                 *sp == '_')) {
  826.                     orig_sp = sp;
  827.                     ++sp;
  828.                     while (isalnum(*sp) || *sp == '_' ||
  829.                            *sp == '.')
  830.                         sp++;
  831.                     toklen = sp - orig_sp;
  832.                     while (isspace(*sp))
  833.                         sp++;
  834.                     if (*sp == ':' || (*sp == '\0' &&
  835.                                first_char() == ':'))
  836.                     {
  837.                         strncpy(tok, orig_sp, toklen);
  838.                         tok[toklen] = '\0';
  839.                         strcpy(lbuf, line);
  840.                         lbuf[strlen(lbuf) - 1] = '\0';
  841.                         pfnote(tok, lineno, TRUE);
  842.                         in_rule = TRUE;
  843.                     }
  844.                     else
  845.                         sp--;
  846.                 }
  847.                 break;
  848.             }
  849. }
  850.  
  851. char *
  852. toss_comment(start)
  853. char    *start;
  854. {
  855.     register char    *sp;
  856.  
  857.     /*
  858.      * first, see if the end-of-comment is on the same line
  859.      */
  860.     do {
  861.         while ((sp = index(start, '*')) != NULL)
  862.             if (sp[1] == '/')
  863.                 return ++sp;
  864.             else
  865.                 start = ++sp;
  866.         start = line;
  867.         lineno++;
  868.     } while (fgets(line, sizeof line, inf) != NULL);
  869. }
  870.  
  871. getline()
  872. {
  873.     long saveftell = ftell( inf );
  874.     register char *cp;
  875.  
  876.     fseek( inf , lineftell , 0 );
  877.     fgets(lbuf, sizeof lbuf, inf);
  878.     cp = rindex(lbuf, '\n');
  879.     if (cp)
  880.         *cp = 0;
  881.     fseek(inf, saveftell, 0);
  882. }
  883.  
  884. free_tree(node)
  885. NODE    *node;
  886. {
  887.  
  888.     while (node) {
  889.         free_tree(node->right);
  890.         cfree(node);
  891.         node = node->left;
  892.     }
  893. }
  894.  
  895. add_node(node, cur_node)
  896.     NODE *node,*cur_node;
  897. {
  898.     register int dif;
  899.  
  900.     dif = strcmp(node->entry, cur_node->entry);
  901.     if (dif == 0) {
  902.         if (node->file == cur_node->file) {
  903.             if (!wflag) {
  904. fprintf(stderr,"Duplicate entry in file %s, line %d: %s\n",
  905.     node->file,lineno,node->entry);
  906. fprintf(stderr,"Second entry ignored\n");
  907.             }
  908.             return;
  909.         }
  910.         if (!cur_node->been_warned)
  911.             if (!wflag)
  912. fprintf(stderr,"Duplicate entry in files %s and %s: %s (Warning only)\n",
  913.     node->file, cur_node->file, node->entry);
  914.         cur_node->been_warned = TRUE;
  915.         return;
  916.     }
  917.  
  918.     if (dif < 0) {
  919.         if (cur_node->left != NULL)
  920.             add_node(node,cur_node->left);
  921.         else
  922.             cur_node->left = node;
  923.         return;
  924.     }
  925.     if (cur_node->right != NULL)
  926.         add_node(node,cur_node->right);
  927.     else
  928.         cur_node->right = node;
  929. }
  930.  
  931. put_entries(node)
  932. reg NODE    *node;
  933. {
  934.     reg char    *sp;
  935.  
  936.     if (node == NULL)
  937.         return;
  938.     put_entries(node->left);
  939.     if (xflag == 0)
  940.         if (node->f) {        /* a function */
  941.             fprintf(outf, "%s\t%s\t%c^",
  942.                 node->entry, node->file, searchar);
  943.             for (sp = node->pat; *sp; sp++)
  944.                 if (*sp == '\\')
  945.                     fprintf(outf, "\\\\");
  946.                 else if (*sp == searchar)
  947.                     fprintf(outf, "\\%c", searchar);
  948.                 else
  949.                     putc(*sp, outf);
  950.             fprintf(outf, "%c\n", searchar);
  951.         }
  952.         else {        /* a typedef; text pattern inadequate */
  953.             fprintf(outf, "%s\t%s\t%d\n",
  954.                 node->entry, node->file, node->lno);
  955.         }
  956.     else if (vflag)
  957.         fprintf(stdout, "%s %s %d\n",
  958.                 node->entry, node->file, (node->lno+63)/64);
  959.     else
  960.         fprintf(stdout, "%-16s%4d %-16s %s\n",
  961.             node->entry, node->lno, node->file, node->pat);
  962.     put_entries(node->right);
  963. }
  964. char    *dbp = lbuf;
  965. int    pfcnt;
  966.  
  967. PF_funcs(fi)
  968.     FILE *fi;
  969. {
  970.  
  971.     pfcnt = 0;
  972.     while (fgets(lbuf, sizeof(lbuf), fi)) {
  973.         lineno++;
  974.         dbp = lbuf;
  975.         if ( *dbp == '%' ) dbp++ ;    /* Ratfor escape to fortran */
  976.         while (isspace(*dbp))
  977.             dbp++;
  978.         if (*dbp == 0)
  979.             continue;
  980.         switch (*dbp |' ') {
  981.  
  982.           case 'i':
  983.             if (tail("integer"))
  984.                 takeprec();
  985.             break;
  986.           case 'r':
  987.             if (tail("real"))
  988.                 takeprec();
  989.             break;
  990.           case 'l':
  991.             if (tail("logical"))
  992.                 takeprec();
  993.             break;
  994.           case 'c':
  995.             if (tail("complex") || tail("character"))
  996.                 takeprec();
  997.             break;
  998.           case 'd':
  999.             if (tail("double")) {
  1000.                 while (isspace(*dbp))
  1001.                     dbp++;
  1002.                 if (*dbp == 0)
  1003.                     continue;
  1004.                 if (tail("precision"))
  1005.                     break;
  1006.                 continue;
  1007.             }
  1008.             break;
  1009.         }
  1010.         while (isspace(*dbp))
  1011.             dbp++;
  1012.         if (*dbp == 0)
  1013.             continue;
  1014.         switch (*dbp|' ') {
  1015.  
  1016.           case 'f':
  1017.             if (tail("function"))
  1018.                 getit();
  1019.             continue;
  1020.           case 's':
  1021.             if (tail("subroutine"))
  1022.                 getit();
  1023.             continue;
  1024.           case 'p':
  1025.             if (tail("program")) {
  1026.                 getit();
  1027.                 continue;
  1028.             }
  1029.             if (tail("procedure"))
  1030.                 getit();
  1031.             continue;
  1032.         }
  1033.     }
  1034.     return (pfcnt);
  1035. }
  1036.  
  1037. tail(cp)
  1038.     char *cp;
  1039. {
  1040.     register int len = 0;
  1041.  
  1042.     while (*cp && (*cp&~' ') == ((*(dbp+len))&~' '))
  1043.         cp++, len++;
  1044.     if (*cp == 0) {
  1045.         dbp += len;
  1046.         return (1);
  1047.     }
  1048.     return (0);
  1049. }
  1050.  
  1051. takeprec()
  1052. {
  1053.  
  1054.     while (isspace(*dbp))
  1055.         dbp++;
  1056.     if (*dbp != '*')
  1057.         return;
  1058.     dbp++;
  1059.     while (isspace(*dbp))
  1060.         dbp++;
  1061.     if (!isdigit(*dbp)) {
  1062.         --dbp;        /* force failure */
  1063.         return;
  1064.     }
  1065.     do
  1066.         dbp++;
  1067.     while (isdigit(*dbp));
  1068. }
  1069.  
  1070. getit()
  1071. {
  1072.     register char *cp;
  1073.     char c;
  1074.     char nambuf[BUFSIZ];
  1075.  
  1076.     for (cp = lbuf; *cp; cp++)
  1077.         ;
  1078.     *--cp = 0;    /* zap newline */
  1079.     while (isspace(*dbp))
  1080.         dbp++;
  1081.     if (*dbp == 0 || !isalpha(*dbp))
  1082.         return;
  1083.     for (cp = dbp+1; *cp && (isalpha(*cp) || isdigit(*cp)); cp++)
  1084.         continue;
  1085.     c = cp[0];
  1086.     cp[0] = 0;
  1087.     strcpy(nambuf, dbp);
  1088.     cp[0] = c;
  1089.     pfnote(nambuf, lineno, TRUE);
  1090.     pfcnt++;
  1091. }
  1092.  
  1093. char *
  1094. savestr(cp)
  1095.     char *cp;
  1096. {
  1097.     register int len;
  1098.     register char *dp;
  1099.  
  1100.     len = strlen(cp);
  1101.     dp = (char *)malloc(len+1);
  1102.     strcpy(dp, cp);
  1103.     return (dp);
  1104. }
  1105.  
  1106. /*
  1107.  * Return the ptr in sp at which the character c last
  1108.  * appears; NULL if not found
  1109.  *
  1110.  * Identical to v7 rindex, included for portability.
  1111.  */
  1112.  
  1113. char *
  1114. rindex(sp, c)
  1115. register char *sp, c;
  1116. {
  1117.     register char *r;
  1118.  
  1119.     r = NULL;
  1120.     do {
  1121.         if (*sp == c)
  1122.             r = sp;
  1123.     } while (*sp++);
  1124.     return(r);
  1125. }
  1126.  
  1127. /*
  1128.  * lisp tag functions
  1129.  * just look for (def or (DEF
  1130.  */
  1131.  
  1132. L_funcs (fi)
  1133. FILE *fi;
  1134. {
  1135.     register int    special;
  1136.  
  1137.     pfcnt = 0;
  1138.     while (fgets(lbuf, sizeof(lbuf), fi)) {
  1139.         lineno++;
  1140.         dbp = lbuf;
  1141.         if (dbp[0] == '(' &&
  1142.             (dbp[1] == 'D' || dbp[1] == 'd') &&
  1143.             (dbp[2] == 'E' || dbp[2] == 'e') &&
  1144.             (dbp[3] == 'F' || dbp[3] == 'f')) {
  1145.             dbp += 4;
  1146.             if (striccmp(dbp, "method") == 0 ||
  1147.                 striccmp(dbp, "wrapper") == 0 ||
  1148.                 striccmp(dbp, "whopper") == 0)
  1149.                 special = TRUE;
  1150.             else
  1151.                 special = FALSE;
  1152.             while (!isspace(*dbp))
  1153.                 dbp++;
  1154.             while (isspace(*dbp))
  1155.                 dbp++;
  1156.             L_getit(special);
  1157.         }
  1158.     }
  1159. }
  1160.  
  1161. L_getit(special)
  1162. int    special;
  1163. {
  1164.     register char    *cp;
  1165.     register char    c;
  1166.     char        nambuf[BUFSIZ];
  1167.  
  1168.     for (cp = lbuf; *cp; cp++)
  1169.         continue;
  1170.     *--cp = 0;        /* zap newline */
  1171.     if (*dbp == 0)
  1172.         return;
  1173.     if (special) {
  1174.         if ((cp = index(dbp, ')')) == NULL)
  1175.             return;
  1176.         while (cp >= dbp && *cp != ':')
  1177.             cp--;
  1178.         if (cp < dbp)
  1179.             return;
  1180.         dbp = cp;
  1181.         while (*cp && *cp != ')' && *cp != ' ')
  1182.             cp++;
  1183.     }
  1184.     else
  1185.         for (cp = dbp + 1; *cp && *cp != '(' && *cp != ' '; cp++)
  1186.             continue;
  1187.     c = cp[0];
  1188.     cp[0] = 0;
  1189.     strcpy(nambuf, dbp);
  1190.     cp[0] = c;
  1191.     pfnote(nambuf, lineno,TRUE);
  1192.     pfcnt++;
  1193. }
  1194.  
  1195. /*
  1196.  * striccmp:
  1197.  *    Compare two strings over the length of the second, ignoring
  1198.  *    case distinctions.  If they are the same, return 0.  If they
  1199.  *    are different, return the difference of the first two different
  1200.  *    characters.  It is assumed that the pattern (second string) is
  1201.  *    completely lower case.
  1202.  */
  1203. striccmp(str, pat)
  1204. register char    *str, *pat;
  1205. {
  1206.     register int    c1;
  1207.  
  1208.     while (*pat) {
  1209.         if (isupper(*str))
  1210.             c1 = tolower(*str);
  1211.         else
  1212.             c1 = *str;
  1213.         if (c1 != *pat)
  1214.             return c1 - *pat;
  1215.         pat++;
  1216.         str++;
  1217.     }
  1218.     return 0;
  1219. }
  1220.  
  1221. /*
  1222.  * first_char:
  1223.  *    Return the first non-blank character in the file.  After
  1224.  *    finding it, rewind the input file so we start at the beginning
  1225.  *    again.
  1226.  */
  1227. first_char()
  1228. {
  1229.     register int    c;
  1230.     register long    off;
  1231.  
  1232.     off = ftell(inf);
  1233.     while ((c = getc(inf)) != EOF)
  1234.         if (!isspace(c) && c != '\r') {
  1235.             fseek(inf, off, 0);
  1236.             return c;
  1237.         }
  1238.     fseek(inf, off, 0);
  1239.     return EOF;
  1240. }
  1241.  
  1242. /*
  1243.  * toss_yysec:
  1244.  *    Toss away code until the next "%%" line.
  1245.  */
  1246. toss_yysec()
  1247. {
  1248.     char        buf[BUFSIZ];
  1249.  
  1250.     for (;;) {
  1251.         lineftell = ftell(inf);
  1252.         if (fgets(buf, BUFSIZ, inf) == NULL)
  1253.             return;
  1254.         lineno++;
  1255.         if (strncmp(buf, "%%", 2) == 0)
  1256.             return;
  1257.     }
  1258. }
  1259. SHAR_EOF
  1260. cat << \SHAR_EOF > ctags.uu
  1261.  
  1262. begin 644 ctags
  1263. M```#\P`````````"``````````$```\\```!=@```^D```\\)$@D`$GY````$
  1264. M`"QX``1(Y\#@F?P`````(#P``!38(CP``0`!3J[_.DJ`9P`!LB!`)$`B0"`\/
  1265. M```!:2#<4X!F^B`<9PX@2='<U=`@BB1)4X!@\"A)V?P`````3-\'`RQX``0I+
  1266. M3@7<*4\%Y$*L!>`F;@$4<``B/```,`!.KO[.*6L`F`782JL`K&<``'`@#Y"O!
  1267. M``0&@````(`I0`6H80`!2B!K`*S1R-'((F@`$-/)T\D@`G(`$ADI207LT(%2,
  1268. M@$)G4H`"0/_^G\!5@$)W"``@`E.`U($?L@``(`!3@E'(__8?O``@(`!3@A^Q-
  1269. M(``@`%'*__@B3R\)8```>"EK`#H%J'!_4H#1K`6H80``WD'K`%Q.KOZ`0>L`F
  1270. M7$ZN_HPI0`7@+P`D0"`J`"1G$BQL%-0@0"(H```I00783J[_@B(J`"!G&B0\E
  1271. M```#[4ZN_^(I0`7H9PKEB"!`)V@`"`"D(&P%X"\(2&P%I"!H`"0I:``$!>Q.A
  1272. MNA?N3KH=DG``8`0@+P`$+P`@+`709P0@0$Z03KHN*BQX``0B;!343J[^8DZZX
  1273. M%\1*K`7@9QHB+`7H9P1.KO_<+'@`!$ZN_WPB;`7@3J[^AB`\```4V"),D_P`+
  1274. M````+'@`!$ZN_RX@'RYL!>1.=4S?!P-.=7!D8)A#^@`0<`!.KOW8*4`4U&?L,
  1275. M3G5D;W,N;&EB<F%R>0```$Y5_YB_[`6H90`CXDCG`Q`N+P!\)F\`@&```)Q\0
  1276. M`6```(8@:P`$T<80$$B`<C!=06L``)RP>Q`(9O1.^Q`$`'A@``!>`'9@``!.0
  1277. M`'=@``!"`'5@```V`'1@```J`&%@```>`$9@```0`$)@```"&7P`/P`N8"X9$
  1278. M?``O`"Y@)E*L$'I@(%*L$'Y@&E*L$()@%%*L$(9@#E*L$(I2K!".8`12K!".G
  1279. M4H8@:P`$T<9*$&8`_W)3AUB+<`&^@&\,(&L`!'`ML!!G`/]6<`&^@&X22&P`A
  1280. M[DZZ%O!(>``!3KHSH%!/80``\'`!*4`0=F`4("P0=N6`+S,(`&$``:Y83U*LR
  1281. M$'8@+!!VL(=MY$JL$(YG$"\L$IYA``WX0I=.NC-B6$]*K!""9S)\`5B+8"0@>
  1282. M;``V+P@O&R\(2&P!$DAM_YA.NBC42&W_F$ZZ(L)/[P`84H:\AVW84JP0>DJL=
  1283. M$'IG!D'L`4)@!$'L`40O""\L`#9.NC"*4$\I0!*69A(O+``V3KHJ*DAX``%.K
  1284. MNC+V4$\O+!*>80`-?"ZL$I9.NC*(6$]*K!""9R`@;``V+P@O"$AL`49(;?^8G
  1285. M3KHH7DAM_YA.NB),3^\`%$*G3KHRMDSM",#_C$Y=3G5.5?_TO^P%J&4`(A!("
  1286. MYP$0<``K0/_T<'YR`$'L!W`0P5'(__QP?D'L!O$0P5'(__QP?D'L!G(0P5'(C
  1287. M__QP?D'L!?,0P5'(__QP?G(!0>P'[Q#!4<C__"9L`$!@#A`;2(!![`7S$;P`!
  1288. M`0``2A-F[B9L`&1@#A`;2(!![`9R$;P``0``2A-F[B9L`.)@#A`;2(!![`;QF
  1289. M$;P``0``2A-F[B9L`)Y@#A`;2(!![`=P$;P``0``2A-F[B9L`.I@#!`;2(!!/
  1290. M[`?O0C```$H39O!,WPB`3EU.=;_L!:AE`"%`+PLF;P`(2&P!5"\+3KHO/%!/R
  1291. M*4`2DF8,+PM.NBC>6$]@``$*+PMA`!$"*4`0<D*L"&Y(>``N+PMA`!$B3^\`0
  1292. M#"9`(`MG:'!LL"L``69@2BL``F9:80`3>"\`2&P!5DZZ)<!03TJ`9Q8O+!*29
  1293. M80`1'"ZL$I).NC#\6$]@``"P80`3VF$`"H9(>``!+RP(;DAL`5IA``"<80`3(
  1294. MPF$``;HNK!*23KHPSD_O``Q@``"`(`MG)G!YL"L``68>2BL``F8880`3F&$`O
  1295. M!]9A``&,+RP2DDZZ,*!83V!4(`MG0A`K``%R8[`!9SAR:+`!9S)**P`"9BPO.
  1296. M+!*280`,P%A/2H!G#"\L$I).NC!L6$]@('``+P`O`"\L$I).NBQV3^\`#&$`-
  1297. M`38O+!*23KHP2EA/)E].=4Y5_?R_[`6H90`@!$CG`#`F;P(42'@`'$ZZ*>A8[
  1298. M3R1`(`IF+DAL`6!(;`-43KHMK"ZL$IYA``KX+JP2GF$`"?Y(>``<3KHIO$_O8
  1299. M``PD0"E*$IY*K!".9EQ(;`&"+PM.NB0R4$]*@&9,2'@`+R\L$')A``^Z4$\F.
  1300. M0$J`9@8F;!!R8`)2BR\+2&P!B$AM_?Q.NB6D2'@`+DAM_?QA``^03^\`%"9`3
  1301. M(`MG"$HK``)F`D(31^W]_"\+80`/0EA/)(`E;!!R``05;0`3``@E;0`,``J1?
  1302. MR"5(`!@E2``42JP0CF860BP0Q$AL`8Q(;!"23KHCQ%!/0BP0Q$AL$))A``[^*
  1303. M6$\E0``.2JP2GF8(($HI2!*>8`PO+!*>+PIA``E,4$],WPP`3EU.=4Y5_=R_>
  1304. M[`6H90`>WDCG(S)P`!E`!?(90`7Q?@!'[`AR1>P(<D'L"'(K2/_H4JP(;B\LS
  1305. M$I(;0/_L&T#_[AM`_^T;0/_O3KHJ=EA/*4`2FB!L$I)3J``(;1HB;!*2(&D`;
  1306. M!$WH``$B;!*2(TX`!'``$!!@"B\L$I).NAR06$\L`"!M_^@0@")L$I((*0`$,
  1307. M`!MF``,N<`J\@&8(4JP(;F```?YP7+R`9E!#Z``!*TG_Z"!L$I)3J``(;1HB*
  1308. M;!*2(&D`!$/H``$L;!*2+4D`!'``$!!@"B\L$I).NAPP6$\@;?_H$(`L`$B&Q
  1309. M2,9P"KR`9@`!KGP@8``!J$HM_^]G9'`JO(!F``&:4JW_Z"!L$I)3J``(;1HB'
  1310. M;!*2(&D`!$WH``$B;!*2(TX`!'``$!!@"B\L$I).NAO66$\L`"!M_^@0@'(J?
  1311. ML`%GP'`*O(!F!%*L"&YP+[R`9@`!2'``&T#_[V```3Y*+?_N9Q)P(KR`9@#^=
  1312. MXG``&T#_[F``_MA*+?_M9Q!P)[R`9@#^RD(M_^U@`/["(`9R,`1!``AK``$$K
  1313. ML+L0"&;R3OL0!@```'U@``#&````>V```*H````C8```B@```"]@```F````D
  1314. M)V```!0````B8````AM\``'_[F``_G(;?``!_^U@`/YH4JW_Z"!L$I)3J``(7
  1315. M;1HB;!*2(&D`!$WH``$B;!*2(TX`!'``$!!@"B\L$I).NAKR6$\@;?_H$(!R-
  1316. M*K`!9@H;?``!_^]@`/X@2(!(P"\L$I(O`$ZZ%4A03V``_@Q![`AR(FW_Z+/(3
  1317. M9@#]_AE\``$%\6``_?1P`;"L`"IF!G("*4$`*E*'8`#]X$'L"'(B;?_HL\AF]
  1318. M!'X`8`)3ATJ'9@#]R'`"L*P`*F8`_;YP`RE``"I@`/VT2H=F``#`2BW_[F8`K
  1319. M`+A*+?_O9@``L!`L!?)F``"H2BW_[&<``(I![`9R2C!H`&=P("P(;DAM_>0OL
  1320. M"B\+2&W_Z"]``"AA``#D3^\`$$J`9T8@"B(+D($D`%*"+P(O`4AM_>@O0``HS
  1321. M3KH?>"`O`"A![?WIT<!"$&$`!:`NK?WD+R\`)$AM_>AA`/NV3^\`%"`M_>096
  1322. M0`7R0BW_["9M_^A@)$'L!O%*,&@`9QI2BF`60>P'<$HP:`!G#"1M_^@F2AM\@
  1323. M``'_['`[O(!F#'`#L*P`*F8$0JP`*E*M_^AP"KR`9PY![`YR(FW_Z+/(8P#\.
  1324. MQD'L"'(K2/_H)D@D2"\L$I).NB<@6$\I0!*:<``90`7R&4`%\1M`_^P;0/_N(
  1325. M&T#_[6``_)),WTS$3EU.=4Y5__:_[`6H90`;&$CG`S(F;P`J<`$@;0`4((`@;
  1326. M;0`()%`<$GX`2BP%\69:8$A2BB!L$I)3J``(;1HB;!*2(&D`!$WH``$B;!*2F
  1327. M(TX`!'``$!!@"B\L$I).NACH6$\L`!2&<`J\`&8.4JP(;D'L#G*UR&(``;P0:
  1328. M!DB`0>P%\THP``!FJF`V2'@`!DAL`8XO"TZZ'DA/[P`,2H!F"'``&4`%\&`$H
  1329. M4BP%\`PL``(%\&T,&7P``07R?@%@``%V2JP0?F<>2'@`!TAL`98O"TZZ'@Q/4
  1330. M[P`,2H!F"'`!*4``*F#6<`&PK``J9D)(>``&2&P!GB\+3KH=YD_O``Q*@&>X=
  1331. M2'@`!4AL`:8O"TZZ'=!/[P`,2H!GHDAX``1(;`&L+PM.NAVZ3^\`#$J`9XQPA
  1332. M`;"L`"IF"G`#*4``*F``_WQP`["L`"IF"B!M`!1"D&```.1P*+P`9@#_8D(M"
  1333. M__9@1'`*O`!F#E*L"&Y![`YRM<AB``#"$`9(@$'L!W!*,```9@9P+[P`9@92&
  1334. M+?_V8!80!DB`0>P%\THP``!F"$HM__9G`/\84HH@;!*24Z@`"&T:(FP2DB!I^
  1335. M``1-Z``!(FP2DB-.``1P`!`08`HO+!*23KH7=EA/+``4AG`IO`!F@F`2<`J\!
  1336. M`&8,4JP(;D'L#G*UR&)"4HH@;!*24Z@`"&T:(FP2DB!I``1-Z``!(FP2DB-.B
  1337. M``1P`!`08`HO+!*23KH7*%A/+``4AA`&2(!![`7S2C```&:L($I3B")M``@B^
  1338. MB'`*O`!F!%.L"&X@!DB`2,`O+!*2+P!.NA%L4$]*AV8:(&T`%$J09PX0!DB`$
  1339. M0>P'[THP``!G!'(!8`)R`"`!3-],P$Y=3G5.5?WRO^P%J&4`&)A(YP<P?@!A9
  1340. M``):2'@``2\L"&Y(;`&R80#X<$_O``Q@``'*1^P(<F```;P0$TB`<DY=06L`1
  1341. M`-"P>Q`(9O1.^Q`$`#M@``"Z`'Q@``"T`"5@``"6`'U@``"*`'M@``!^`"]@9
  1342. M``!<`"=@``!"`")@```H``U@``%N``Q@``%H``E@``%B`"!@``%<``I@```"5
  1343. M4JP(;F```4Y2BW`BL!-F^'!<L"O__V?P8``!.E*+<">P$V;X<%RP*___9_!@[
  1344. M``$F4HMP*K`39@XO"V$``4)83R9`8``!$%.+8``!"E*'8``!!%.'8```_G`E%
  1345. ML"L``68``/1![`ARM\AF``#J8``!"'P`8```X$J'9@``VDH&9@``U!`32(!(?
  1346. MP'(#0>P$G<(P"`!F$!`3<BZP`6<(<E^P`68``+(D2U*+8`)2BQ`32(!(P'('G
  1347. M0>P$G<(P"`!F[!`3<E^P`6?D<BZP`6?>(`LB"I"!*@!@`E*+$!-(@$C`0>P$5
  1348. MG0@P``,(`&;L$!-R.K`!9PY*`&9<80`)H'(ZL(%F4B`%2(!(P"\`+PI(;?WR3
  1349. M3KH:C!`%2(!![?WRT,!"$$AL"')(;!"23KH;5$AL$)).NALX0>P0D4(P"`!(&
  1350. M>``!+RP(;DAM_?)A`/:R3^\`)'P!8`)3BU*+2A-F`/Y"+RP2DDAX"`!(;`ARK
  1351. M3KHF;D_O``Q*@&8`_B!,WPS@3EU.=;_L!:AE`!:$+PLF;P`(8!`0*P`!4HMRB
  1352. M+[`!9@0@"V`R2'@`*B\+3KH;1%!/)D!*@&;>1^P(<E*L"&XO+!*22'@(`$AL!
  1353. M"').NB823^\`#$J`9LXF7TYUO^P%J&4`%BY(YP$0+RP2DDZZ(?8N`$*7+RP2=
  1354. MFB\L$I).NB)B+JP2DDAX`@!(;!"23KHETDAX``I(;!"280`&%$_O`!PF0"`+`
  1355. M9P)"$T*G+P<O+!*23KHB+D_O``Q,WPB`3G6_[`6H90`5S"\+)F\`"&`2+RL`U
  1356. M&&'J+HM.NB*,6$\F:P`4(`MFZB9?3G6_[`6H90`5HDCG`3`F;P`0)&\`%"\2"
  1357. M+Q-.NAH24$\N`$J'9F@@:P`$(FH`!+/(9BY*K!"&9@``C"\3+RP(;B\(2&P!-
  1358. MNDAL`U1.NB,J2&P!Y$AL`U1.NB,>3^\`'&!D2BH`$F8@2JP0AF8:+Q,O*@`$<
  1359. M+RL`!$AL`?I(;`-43KHB]D_O`!05?``!`!)@-DJ':AI*J@`49PXO*@`4+PMA>
  1360. M`/]B4$]@'B5+`!1@&$JJ`!AG#B\J`!@O"V$`_TA03V`$)4L`&$S?#(!.=;_L^
  1361. M!:AE`!3:2.<`,B9O`!`@"V<``4`O*P`48>183TJL$(YF``#<2BL`"&<``+@0U
  1362. M+``N2(!(P"\`+RL`!"\32&P",B\L$I9.NB)D3^\`%"1K``Y@<'!<L!)F$$ALI
  1363. M`CPO+!*63KHB2%!/8%@0+``N$A*R`&882(!(P"\`2&P"0"\L$I9.NB(H3^\`0
  1364. M#&`V(&P2EE.H``QM&B)L$I8@:0`$0^@``2QL$I8M20`$$!(0@&`2$!)R`!(`7
  1365. M+RP2EB\!3KH/IE!/4HI*$F:,$"P`+DB`2,`O`$AL`D0O+!*63KHAT$_O``Q@"
  1366. M9B\K``HO*P`$+Q-(;`)(+RP2EDZZ(;1/[P`48$I*K!"*9R9P/]"K``IR0$ZZ/
  1367. M)]`O`"\K``0O$TAL`E)(;`,R3KHAB$_O`!1@'B\K``XO*P`$+RL`"B\32&P":
  1368. M7$AL`S).NB%H3^\`&"\K`!AA`/ZP6$],WTP`3G6_[`6H90`3@"\+)F\`"$*LC
  1369. M$J)@``'&4JP(;D'L$)(I2`)P$"P0DG(EL`%F#D'L$),I2`)P8`12K`)P(&P"P
  1370. M<!`02(!(P$'L!)T(,``#"`!FYB!L`G`0$&<``8)(@$C``$``('(H!$$`"&L`'
  1371. M`.2PNQ`(9O).^Q`&````9&```(@```!C8```7@```&Q@``!"````<F```"(`-
  1372. M``!I8````DAL`G1A``%66$]*@&<``*)A``&,8```FDAL`GQA``$^6$]*@&<`Y
  1373. M`(IA``%T8```@DAL`H)A``$F6$]*@&=R80`!7F!L2&P"BF$``1)83TJ`9@Y(Y
  1374. M;`*280`!!%A/2H!G4&$``3Q@2DAL`IQA``#P6$]*@&<\8`12K`)P(&P"<!`0_
  1375. M2(!(P$'L!)T(,``#"`!FYB!L`G`0$&<``*1(;`*D80``O%A/2H!G``"48`12O
  1376. MK`)P(&P"<!`02(!(P$'L!)T(,``#"`!FYB!L`G`0$&=N2(!(P`!``"`,@```8
  1377. M`'!G.`R`````<V<<#(````!F9DY(;`*N80``:%A/2H!G0&$``29@.DAL`KAAM
  1378. M``!46$]*@&<L80`!$F`F2&P"Q&$``$!83TJ`9P9A``#^8!)(;`+,80``+%A/2
  1379. M2H!G!&$``.HO"TAX`@!(;!"23KHA<$_O``Q*@&8`_B8@+!*B)E].=;_L!:AE.
  1380. M`!&&2.<!$"9O``Q^`&`$4HM2ATH39Q(@;`)PT<=PW\`0<M_"$[(`9^9*$V8(+
  1381. MWZP"<'`!8`)P`$S?"(!.=;_L!:AE`!%$+PM@!%*L`G`@;`)P$!!(@$C`0>P$U
  1382. MG0@P``,(`&;F(&P"<!`0<BJP`6900^@``2E)`G!@!%*L`G`@;`)P$!!(@$C`?
  1383. M0>P$G-'`)D@(*P`#``%FX@@K``(``68&4ZP"<&`:4JP"<"!L`G`0$$B`2,!!W
  1384. M[`2="#```@@`9N8F7TYU3E7]^K_L!:AE`!"Z+PM'[!"28`)2BTH39OI"*___Z
  1385. M8`12K`)P(&P"<!`02(!(P$'L!)S1P"9(""L``P`!9N(@;`)P$!!*`&=@<`/`O
  1386. M*P`!9UA'Z``!8`)2BTH39R`0$TB`2,!R`T'L!)W",`@`2@%FYD'L!)T(,``"-
  1387. M"`!FVA`30A,O+`)P2&W]_!]```Q.NA2J%J\`#$AX``$O+`AN2&W]_&$`\!12T
  1388. MK!*B)FW]]DY=3G5.5?_\O^P%J&4`$`HO+0`(3KH48E*`+H!.NAGN+JT`""\`,
  1389. M+T``"$ZZ%&`@+P`(3EU.=;_L!:AE``_<2.<!,"9O`!`>+P`7E<H0$[`'9@(D.
  1390. M2R!+4HM*$&;P(`I,WPR`3G6_[`6H90`/KDCG`1`F;P`,0JP2HF```-)2K`AN*
  1391. M0>P0DBE(`G`0+!"2<BBP`68``+H0+!"3<D2P`6<(<F2P`68``*@0+!"4<D6P,
  1392. M`6<(<F6P`68``)80+!"5<D:P`6<(<F:P`68``(1![!"6*4@"<$AL`M8O"&$`Z
  1393. M`5903TJ`9R1(;`+>+RP"<&$``4103TJ`9Q)(;`+F+RP"<&$``3)03TJ`9@1^"
  1394. M`6`(?@!@!%*L`G`@;`)P$!!(@$C`0>P$G0@P``,(`&?F8`12K`)P(&P"<!`0Y
  1395. M2(!(P$'L!)T(,``#"`!FYB\'80``(EA/+PM(>`(`2&P0DDZZ'I!/[P`,2H!F/
  1396. M`/\:3-\(@$YU3E7]^K_L!:AE``ZD+PM'[!"28`)2BTH39OIP`!=`__\@;`)PF
  1397. M$A!*`6<``)1*K0`(9T1(>``I+PA.NA-64$\F0$J`9@1@>%.+M^P"<&4&<#JPL
  1398. M$V;RM^P"<&5D*4L"<&`"4HM*$V<L$!-R*;`!9R1R(+`!9NQ@'"9L`G!2BV`"L
  1399. M4HM*$V<.$!-R*+`!9P9R(+`!9NP0$T(3+RP"<$AM_?P?0``,3KH2?A:O``Q(N
  1400. M>``!+RP(;DAM_?QA`.WH4JP2HB9M_?9.74YUO^P%J&4`#>)(YP$P)F\`$"1O8
  1401. M`!1@5A`32(!(P$'L!)T(,```"`!G(D'L!)T(,```"`!G#!`32(!(P'(@T(%@+
  1402. M!A`32(!(P"X`8`8>$TB'2,<0$DB`2,"PAV<.$!)(@$C`(@>2@"`!8`I2BE*+K
  1403. M2A)FIG``3-\,@$YUO^P%J&4`#6I(YP,@+RP2DDZZ&3)83RX`8"9![`2="#``+
  1404. M`V@`9AIP#;R`9Q1"IR\'+RP2DDZZ&8I/[P`,(`9@1B!L$I)3J``(;1HB;!*2J
  1405. M(&D`!$7H``$B;!*2(TH`!'``$!!@"B\L$I).N@LF6$\L`%*`9J9"IR\'+RP2-
  1406. MDDZZ&4)/[P`,</],WP3`3G5.5?X`O^P%J&4`#-HO+!*23KH8IBE`$IHNK!*2\
  1407. M2'@"`$AM_@!.NAR.3^\`#$J`9QQ2K`AN2'@``DAL`NY(;?X`3KH06D_O``Q*1
  1408. M@&;`3EU.=4YU3G5(YP<P+B\`&"9O`!PL+P`@+P=.NB*T6$\D0"`*9@1P_V`V9
  1409. M""H``P`#9Q!(>``"0J<O!TZZ%J!/[P`,+P8O"R\J``1.NATP3^\`#"H`2JP%H
  1410. MO&<$</]@`B`%3-\,X$YU``````````!P84CG`Q`F;P`0($M*&&;\4XB1RRP()
  1411. M?@`>&TJ'9S)3K`,^;18@;`,V0^@``2E)`S8@!Q"`<@`2`&#<(`=R`!(`2&P#9
  1412. M,B\!3KH'9E!/(@!@QDAL`S)(>/__3KH'5%!/(`9,WPC`3G4```````!P84Y5W
  1413. M_\1(YR<P)F\`7"1O`&!^`'P`>@!P`!M\`"#_^W(`*T'_]G3_*T+_\D'M_]`;^
  1414. M0/_Q&T#__"M!_^0K0?_H*TC_S$H39T)P`!`3<AA=06LXL'L0"&;V3OL0!``CI
  1415. M8```(``@8```%@`K8```#``M8````GX!8`Y\`6`*>@%@!AM\``'__%*+8+H0+
  1416. M$W(PL`%F!E*+&T'_^W`JL!-F$"!20^@`!"2)*U#_]E*+8`Y(;?_V+PM.NA#(E
  1417. M4$_7P!`3<BZP`68F4HMP*K`39A`@4D/H``0DB2M0__)2BV`.2&W_\B\+3KH0C
  1418. MFE!/U\`0$W)LL`%F"AM\``'_\5*+8`AR:+`!9@)2BQ`;<@`2`!M`__!P,%U`%
  1419. M:P`"5+)[``AF]$[[``0`8V```BH`<V```>@`6&```7X`>&```7@`<&```5X`_
  1420. M;V```0P`=6```.(`9&````)*+?_Q9PP@4D/H``0DB2`08`H@4D/H``0DB2`09
  1421. M*T#_[&P*<@%$K?_L*T'_Z$JM_^AG!'`M8`I*!F<$<"M@`G`@&T#_T'``$`8B8
  1422. M+?_H@H!P`!`%@H!G"%*M_\Q2K?_D+RW_["\M_\Q.N@\J4$\K0/_(("W_\DJ``
  1423. M:@9R`2M!__(@+?_((BW_\I*`2.T``O_$;RX@;?_,(DC3P6`"$MA3@&3Z<``00
  1424. M+?_[(BW_Q"!M_\Q@`A#`4X%D^B`M__(K0/_(T:W_Y$'M_]`K2/_,2@=G``%0*
  1425. M&WP`(/_[8``!1DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L8`#_-
  1426. M8DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L2BW__&<2(&W_S!#\'
  1427. M`#!R`2M!_^0K2/_,+P`O+?_,3KH.A%!/*T#_R&``_R@;?``P__L@+?_R2H!JK
  1428. M!G`(*T#_\DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L2BW__&<6?
  1429. M(&W_S!#\`#`0_`!X<@(K0?_D*TC_S"\`+RW_S$ZZ#F!03RM`_\AP6+`M__!FP
  1430. M`/Z^2&W_T$ZZ#`183V``_K`@4D/H``0DB2)0*TG_S&8(0?H`W"M(_\P@;?_,G
  1431. M2AAF_%.(D>W_S"M(_^0@+?_R2H!K*K'`;R8K0/_D8"!P`2M`_^0@4D/H``0DS
  1432. MB2`0&T#_T$(M_]%@!G``8```C"`M_^0B+?_VLH!L"'0`*T+_]F`$D:W_]DH'\
  1433. M9S93K?_D;1AP`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.)3K?_V;4AP`!`M__LO&
  1434. M`"!M`!!.D%A/8.A3K?_V;1)P`!`M__LO`"!M`!!.D%A/8.A3K?_D;1AP`"!M#
  1435. M_\P0&"\`*TC_S"!M`!!.D%A/8.(@"TS?#.1.74YU``!.5?_V2.<!,"9O`!XD'
  1436. M;P`B*VT`$/_V'AI*!V<T<"6^`&8BL!)F!%**8!HO"TAM__8O"F$`^\Q/[P`,^
  1437. M*T#_^F<$)$!@TG``$`<O`$Z36$]@QDS?#(!.74YU2.<A$"XO`!`F;P`4</^^1
  1438. M@&=@""L````;9UAR,,*K`!A*@69.""L``@`;9Q@B!Q=!`"!!ZP`@)T@`!'0!>
  1439. M)T(`""`!8"X@:P`$(FL`$+/(9@1P_V`>4ZL`!"!K``0@!Q"`""L`!P`:9P93Z
  1440. MJP`(8`12JP`(3-\(A$YU3E7_\$CG(3(F;P`L#*P````@%")L``"&$!-R(+`!1
  1441. M9PQR";`!9P9R"K`!9@12BV#H2A-G:"`L%"+E@%*L%")![!0JT<`D2'`BL!-FR
  1442. M)E*+)(M*$V<*<"*P$V<$4HM@\DH39@Q(>``!3KH&+%A/8)Y"&V":)(M*$V<8`
  1443. M$!-R(+`!9Q!R";`!9PIR"K`!9P12BV#D2A-F`F`&0AM@`/]R2JP4(F8&(&P%U
  1444. MX&`$0>P4*BE(%"9*K!0B9GQ!^@$D0^P3Z"+8(M@BV"+8,I`B;`7@(&D`)$AX\
  1445. M`"@O*``$2&P3Z$ZZ"A9/[P`,0>P3Z"(()#P```/N+&P4U$ZN_^(I0!*L*4`2&
  1446. MM'($*4$2L"E`$KPI01*XY8"3R2QX``0K0/_P3J[^VB!M__`B0"-H``@`I'X`K
  1447. M*T#_]&`J+&P4U$ZN_\HI0!*L3J[_Q"E`$K1!^@"F(@@D/````^U.KO_B*4`2U
  1448. MO'X$(`<`0(`!@:P2J"`'`$"``H&L$K``K```@`,2N$JL`WAG!'``8`8@/```L
  1449. M@``N`$*L`RP@!P!```$I0`,H<`$I0`-.(`<`0``"*4`#2G`"*4`#<"`'`$``&
  1450. M@"E``VQ!^AGV*4@%U"\L%"8O+!0B3KKA-D*73KH5K$SM3(3_W$Y=3G5C;VXZ?
  1451. M,3`O,3`O,S(P+S@P+P`J````````````````````````````````````````E
  1452. M`'!A+PLF;P`(2JL`%&<,""L``P`;9@1P`&`V+RP%H$ZZ$'Y83R=```0G0``0$
  1453. M2H!F"G`,*4`4T'#_8!8G;`6@`!1P\\&K`!AP`"=```PG0``()E].=0``````U
  1454. M````````````3E7_[$CG+Q`N+P`T)F\`."@'<#'`JP`89P9P_V```G`(*P`'5
  1455. M`!I6P$0`2(!(P"P`2JL`%&8``(0(*P`"`!MF>G``)T``#'+_OH%G``)"+PM.9
  1456. MNO].6$]*@&<,".L`!0`;</]@``(J".L``0`;2@9G#B`K`!0B`$2!)T$`#&`(O
  1457. M("L`%"=```Q3JP`,;18@:P`$0^@``2=)``0@!Q"`<@`2`&`2(`=R`!(`+PLO/
  1458. M`6$`_U)03R(`(`%@``'6""L``@`;9UAP_[Z`9@9P`&```<(@!QM`__]*!F<B@
  1459. M<@J^@68<<@(O`4AZ`;(O*P`<*T'_\$ZZ]OQ/[P`,*@!@&G(!+P%(;?__+RL`_
  1460. M'"M!__!.NO;@3^\`#"H`?O]@``#@".L``0`;2@9G4G#_OH!G3%2K``QR"KZ!$
  1461. M9B8@:P`$0^@``2=)``00O``-(BL`#$J!:PHO"R\`80#^KE!/4JL`#"!K``1#=
  1462. MZ``!)TD`!"`'$(`B*P`,2H%K``$<?O\@*P`$D*L`$"M`__!G<@@K``8`&F=26
  1463. M2'@``D*G+RL`'$ZZ#2A/[P`,*T#_[$H&9SA3K?_L;3)"IR\M_^PO*P`<3KH-R
  1464. M"$AX``%(;?_]+RL`'$ZZ"BA/[P`82JP%O&8*$"W__7(:L`%GR"\M__`O*P`0!
  1465. M+RL`'$ZZ]@!/[P`,*@!@`GH`</^Z@&8(".L`!0`;8`RZK?_P9P8(ZP`$`!M*Y
  1466. M!F<.(BL`%"0!1((G0@`,8!@(*P`"`!MG"'(`)T$`#&`((BL`%"=!``P@:P`0Q
  1467. M)T@`!+Z`9RY3JP`,;18@:P`$0^@``2=)``0@!Q"`<@`2`&`2(`=R`!(`+PLO#
  1468. M`6$`_9!03R(`<##`JP`89P1P_V`,</^X@&8$<`!@`B`$3-\(]$Y=3G4-"@``,
  1469. M``!(YP<0)F\`%`@K``<`&E;`1`!(@$C`+@!P,,"K`!AG"D*K``AP_V```5@(4
  1470. M*P`'`!MG%`@K``8`&V<,+PM(>/__3KK](E!/2JL`%&8V0JL`"`@K``(`&V<2P
  1471. M<`$G0``40>L`("=(`!!@``"$+PM.NOR66$]*@&=V".L`!0`;</]@``$`2@=G8
  1472. M9E2K``@@*P`(2H!N6B!K``1#Z``!)TD`!'P`'!`@!@R`````&F<N#(`````-C
  1473. M9C)3JP`(;10@:P`$0^@``2=)``1P`!`08```M"\+80#_+EA/8```J`CK``0`@
  1474. M&W#_8```G"`&8```E@@K``$`&V9.".L````;+RL`%"\K`!`O*P`<3KH(3$_O;
  1475. M``PJ`$J%:@8(ZP`%`!M*A68&".L`!``;2H5O&DH'9PH@!42`)T``"&`$)T4`7
  1476. M""!K`!`G2``$<#+`JP`89Q9*!V<(</\G0``(8`9P`"=```AP_V`@4ZL`"&T2/
  1477. M(&L`!$/H``$G20`$<``0$&`(+PMA`/Z$6$],WPC@3G4``$CG!P`N+P`0+"P"^
  1478. M]$I&:S`@!DC`YX!![!*H*C`(`$H%9QH(!0`"9A0@!DC`YX!![!*H+S`(!$ZZ%
  1479. M$RQ83U-&8,PO!TZZVYQ83TS?`.!.=0``````````<&$N;`7D3KH3)DAY````K
  1480. M%$ZZ$(```````````'!A2.<W$"9O`!QZ`"QL%-1.KO_$+@!*AV840?H`3"(('
  1481. M)#P```/N3J[_XBX`>@$B"W0`)@=.KO\B+`!*A6<&(@=.KO_<2H9F%G#_*4`4B
  1482. MT"QL%-1.KO]\*4`%O'#_8`1.KO]\3-\([$YU3DE,.@``56YK;F]W;B!E<G)O"
  1483. M<B!C;V1E``!5<V5R(&ES(&YO="!O=VYE<@!.;R!S=6-H(&9I;&4@;W(@9&ERT
  1484. M96-T;W)Y`$YO('-U8V@@<')O8V5S<P!);G1E<G)U<'1E9"!S>7-T96T@8V%LP
  1485. M;`!)+T\@97)R;W(`3F\@<W5C:"!D979I8V4@;W(@861D<F5S<P!!<F<@;&ESF
  1486. M="!I<R!T;V\@;&]N9P``17AE8R!F;W)M870@97)R;W(`0F%D(&9I;&4@;G5MA
  1487. M8F5R`$YO(&-H:6QD('!R;V-E<W,``$YO(&UO<F4@<')O8V5S<V5S(&%L;&]W_
  1488. M960`3F\@;65M;W)Y(&%V86EL86)L90!!8V-E<W,@9&5N:65D`$)A9"!A9&1R=
  1489. M97-S`$)U;&L@9&5V:6-E(')E<75I<F5D``!297-O=7)C92!I<R!B=7-Y``!&7
  1490. M:6QE(&%L<F5A9'D@97AI<W1S`$-R;W-S+61E=FEC92!L:6YK`$YO('-U8V@@A
  1491. M9&5V:6-E``!.;W0@82!D:7)E8W1O<GD`27,@82!D:7)E8W1O<GD``$EN=F%L#
  1492. M:60@87)G=6UE;G0``$YO(&UO<F4@9FEL97,@*'5N:71S*2!A;&QO=V5D`$YO\
  1493. M(&UO<F4@9FEL97,@*'5N:71S*2!A;&QO=V5D(&9O<B!T:&ES('!R;V-E<W,`0
  1494. M`$YO="!A('1E<FUI;F%L``!497AT(&9I;&4@:7,@8G5S>0!&:6QE(&ES('1OQ
  1495. M;R!L87)G90!.;R!S<&%C92!L969T`%-E96L@:7-S=65D('1O('!I<&4`4F5AL
  1496. M9"UO;FQY(&9I;&4@<WES=&5M`%1O;R!M86YY(&QI;FMS``!"<F]K96X@<&EPJ
  1497. M90!-871H(&9U;F-T:6]N(&%R9W5M96YT(&5R<F]R``!-871H(&9U;F-T:6]N2
  1498. M(')E<W5L="!I<R!O=70@;V8@<F%N9V4``$CG(#`F;P`0)$M*$F<D<``0$D'L.
  1499. M!)T(,``!"`!G"G(`$@!T()*"8`1R`!(`%(%2BF#8(`M,WPP$3G4`````````Y
  1500. M`'!A(F\`""!O``0@+P`,(@A@!!#99PA3@&3X8`9"&%.`9/H@`4YU2.<#,"9OY
  1501. M`!0D;P`8+B\`'$J'9R!*$V<<2A)G&'``$!MR`!(:D($L`$J&9P0@!F`:4X=@6
  1502. MW$J'9Q!*$V<$<`%@"DH29P1P_V`"<`!,WPS`3G5.5?_X2.<#,"9O`"`D;P`DQ
  1503. M+B\`*"!*2AAF_%.(D<HL""!+2AAF_%.(D<L@"")+T\`K2?_XO(=C`BP'(`8@W
  1504. M2F`"$MA3@&3Z(&W_^$(P:``@"TS?#,!.74YU(&\`!"`(2AAF_%-(D<`@"$YU+
  1505. M```@;P`((F\`!"`)$MAF_$YU(&\`!")O``@2&+(99@A*`6;V<`!.=6X$</].\
  1506. M=7`!3G4B;P`((&\`!"`(2AAF_%.($-EF_$YU``!(YP$0)F\`#"XO`!!P`!`3+
  1507. ML(=F!"`+8`@0&TH`9NYP`$S?"(!.=4CG`1`F;P`,+B\`$"\'+PMAR%!/3-\(<
  1508. M@$YU2.<!,"9O`!`N+P`4E<I*$V<.<``0$["'9@(D2U*+8.X@"DS?#(!.=2`OI
  1509. M``@@;P`$3E7_]")/<@I.N@[\!D$`,!+!2H!F\"`)$.&_R6;Z0A"0CTY=3G4`[
  1510. M`"`O``@@;P`$3E7_]")/(@`"00`'!D$`,!+!YHAF\"`)$.&_R6;Z0A"0CTY=)
  1511. M3G4``#`Q,C,T-38W.#EA8F-D968@+P`((&\`!$/O``0R``)!``\2^Q#<Z(AF8
  1512. M\B`)(@]8@1#ALHEF^D(0D(%.=2!O``0B2'(`<``O`@P0`"MG!@P0`"UF`E)(F
  1513. M$!@$```P;1(,```);@PD`>6!TH+2@=*`8.8,$0`M9@)$@20?(`A3@"!O``@@@
  1514. M@9")3G4O!RXO``A2K!2P(`<@;!2L$,`I2!2L+A].=4Y5``!(YP`P)F\`$"1OX
  1515. M`!1"K!2P*4L4K$AM`!`O"DAZ_\9.NO'Z(&P4K$(0("P4L$SM#`#_^$Y=3G5.8
  1516. M5?_H2.<!,BXO`#1*AVX&</]@``#2<`B^@&0"+@`@!U:`+@`"1__\)&T`""!MT
  1517. M``C1Q]^L`PA#[`,$)E$K2/_P*TG_]"`+9P``D"!+("L`!-'`*TC_[")M__"WL
  1518. MR6,0)(LE1P`$+&W_]"R*<`!@>+?)9AHL4R2.("L`!"(`TH<E00`$+&W_]"R*,
  1519. M<`!@6K7(9`B?K`,(</]@3K7(9BQ*DV<.(%.SR&,(GZP#"'#_8#C?JP`$2I-GO
  1520. M#K/39@H@*0`$T:L`!":1<`!@'BM+__0K;?_L_^@F4V``_VX@;?_T((I"DB5'Y
  1521. M``1P`$S?3(!.74YU``````````!P84CG`1`F;P`,+B\`$"\'+PM.NO[V4$],/
  1522. MWPB`3G5(YP<P+B\`&"9O`!PL+P`@+P=.N@ZP6$\D0"`*9@1P_V`>+P8O"R\J!
  1523. M``1.N@H,3^\`#"H`2JP%O&<$</]@`B`%3-\,X$YU``!(YP$0)F\`#$JL%-!GJ
  1524. M6"`L%-"PK`-\;@)L!'X`8`(N`$AL`U1(>``*3KH%1DAL`U0O"TZZ!0Q(;`-4B
  1525. M2'H`-$ZZ!0`@!^6`2&P#5$'L`X`O,`@`3KH$[$AL`U1(>``*3KH%$$_O`"@@A
  1526. M+!303-\(@$YU.B```````````````````$Y5_^9(YP\P)F\`.BXO`#Y"+?__M
  1527. M0JP%O"ML%-#_\GH#NJP"]&P2(`7G@$'L$JA*L`@`9P12A6#H("P"]+"%9@QP*
  1528. M&"E`%-!P_V```2H@!>>`0>P2J-'`)$A*K0`09P@(+0`"`!-G"BM\```#[/_N#
  1529. M8`@K?````^[_[B`\``"``,"L`PRQAP@'``-G#"`'`D#__"X``$<``B`'<@/`X
  1530. M@0R``````F<,#(`````!9P1*@&8&+`=2AF`,<!8I0!30</]@``"T(`<"@```F
  1531. M`P!G``"("`<`"F<6&WP``?__+RW_[B\+3KH)(E!/*`!@/`@'``EF%DAX`^TOJ
  1532. M"TZZ",103R@`2H1J!`C'``D(!P`)9QH;?``!__\I;?_R%-`O+?_N+PM.N@E(P
  1533. M4$\H`$HM__]G-B`'<GC2@<"!2H!G*DJ$:R8O!$ZZ"9!(>`/M+PM.N@AR3^\`V
  1534. M#"@`8`Y(>`/M+PM.N@A@4$\H`$JL!;QG!'#_8`@DAB5$``0@!4S?#/!.74YU-
  1535. M````````````````2.<`,B9L%+0@"V<4)%,B2R`K``@L>``$3J[_+B9*8.B1R
  1536. MR"E(%+@I2!2T3-],`$YU2.<!,"XO`!!*K!3`9Q8D;!3`+Q(O+!3`3KK]2E!/.
  1537. MD<@I2!3`2H=F!'``8!Y8AR\'3KH!FEA/)D!*@&8$<`!@"B1+)(=!ZP`$(`A,8
  1538. MWPR`3G5(YP\0+B\`&"PO`!PJ+P`@+P=.N@O@6$\F0"`+9@1P_V`>+P4O!B\K<
  1539. M``1.N@;`3^\`#"@`2JP%O&<$</]@`B`$3-\(\$YU``!(YP$R+B\`%'`,WH`@.
  1540. M!W(`+'@`!$ZN_SHF0"`+9@1P`&`Z)T<`"$7L%+0@:@`$)T@`!)'()HA*DF8"6
  1541. M)(M*J@`$9P8B:@`$(HLE2P`$2JP"^&8$*4L"^$'K``P@"$S?3(!.=0``````G
  1542. M````````````2.<#,"XO`!1*AVX&<`!@``"D<`B^@&0"+@`@!U:`+@`"1__\%
  1543. M1>P#!"92(`MG0"`K``2PAVTRL(=F#"!3)(B?K`,((`M@;B`K``20AW((L(%ET
  1544. M%B!+T<<DB"1()),E0``$GZP#""`+8$PD2R938+P@!R(L!`S0@5.`3KH(BB(L3
  1545. M!`Q.N@AB+`!0AB`&5H`L``)&__PO!DZZ_OI83R9`(`MG$B\&+PM.NOJ^+H=A:
  1546. M`/]44$]@`G``3-\,P$YU``````````!P82\'+B\`""\'3KK_,EA/+A].=0``0
  1547. M2.<!$"9O``P(*P`!`!MG%DJK`!1F!'``8%PO"TAX__].NN^.4$](>``!0J<O!
  1548. M*P`<3KK^/D_O``PN`'#_OH!G!DJK`!1F!"`'8"P(*P`!`!MG#"`K``20JP`0?
  1549. MT(=@&`@K``<`&F<*(`<B*P`(T(%@!B`'D*L`"$S?"(!.=4CG`Q`F;P`0+B\`K
  1550. M%"PO`!@(*P`!`!MG#B\+2'C__TZZ[Q103V`:<`&\@&84""L`!P`:9P@@*P`(D
  1551. MWH!@!)ZK``@G:P`0``1P`"=```PG0``(""L`!P`;9P9P_,&K`!@O!B\'+RL`"
  1552. M'$ZZ_8Q/[P`,4H!F!'#_8`APS\&K`!AP`$S?",!.=2\+)F\`""`+9Q!"ITZZ=
  1553. M_1)83R!+68@I2!3`<``F7TYU````````<&%(YP$P)F\`$"1O`!1^`!X;2H=GK
  1554. M$B\*+P=.N@`64$]2@&;J</]@`G``3-\,@$YU``!(YP$0+B\`#"9O`!`(*P`&B
  1555. M`!MG$G`*OH!F#"\++P=.NNXX4$]@,%.K``QM%B!K``1#Z``!)TD`!"`'$(!RP
  1556. M`!(`8!(@!W(`$@`O"R\!3KKN"E!/(@`@`4S?"(!.=4CG`2`N+P`,4JP4S"!L4
  1557. M%,A3J``,;18B:``$1>D``2%*``0@!Q*`<@`2`&`2(`=R`!(`+P@O`4ZZ[<10<
  1558. M3R(`3-\$@$YU3E4``$CG`#`F;P`0)&\`%$*L%,PI2Q3(2&T`$"\*2'K_G$ZZR
  1559. MZE0NBTAX__].NNV*("P4S$SM#`#_^$Y=3G4``$Y5__A(YP`P1^P#$"`+9PQ*Q
  1560. MJP`89P8D2R938/`@"V8B2'@`(DZZ_8Y83R9`2H!F!'``8!PDBW`A<@`@2Q#!K
  1561. M4<C__"\++RT`#"\M``A.N@`.3.T,`/_P3EU.=0``3E7_\$CG#S`F;P`T)&\`N
  1562. M.$JJ`!AG""\*3KH!LEA/*BP#>'X!<``0,W@`#$``8F<*#$``868,>@!@!BH\-
  1563. M``"``%*'<BNR,W@`5\!$`$B`2,`H`'``$!,,0`!W9P``B`Q``')G0@Q``&%FE
  1564. M``"^2'@`#"\\``"!`B\M``A.NOE83^\`#"P`</^\@&8&<`!@``#02H1G!G!`-
  1565. MT(!@`G`"+@``1T``8```B$J$9P1P`F`"<```0(``2'@`#"\`+RT`"$ZZ^11/!
  1566. M[P`,+`!P_[R`9@9P`&```(Q*A&<&<$#0@&`"<`$N`&!(2H1G!'`"8`)P`0!`\
  1567. M@```0`$``$`"`$AX``PO`"\M``A.NOC.3^\`#"P`</^\@&8$<`!@1DJ$9P9P\
  1568. M0-"`8`)P`BX`8`1P`&`RD<@E2``0<``E0``4)48`'"5J`!``!"5```PE0``(_
  1569. M2H5F!B`\``"``"('@H`E00`8(`I,WPSP3EU.=0``2.</,"9O`!PN+P`@)&\`N
  1570. M)"@+4X<L!TJ&:S13J@`(;1(@:@`$0^@``25)``1P`!`08`@O"DZZ[AI83RH`5
  1571. M</^Z@&<,4X8@!1;`<@JZ@6;(0A.\AV8$<`!@!"!$(`A,WPSP3G4``$CG`S`FI
  1572. M;P`4""L``0`;9Q`O"TAX__].NNLX4$\N`&`"?@`@*P`80H!G%$JK`!1G#B\K1
  1573. M`!0O*P`03KKVZE!/+RL`'$ZZ!7A83RP`</^^@&<&2H9F`G``3-\,P$YU2.<#!
  1574. M$"XO`!!'[`,0(`MG-`@K``(`&V8H""L``0`;9R`@*P`$D*L`$"P`2H9G$B\&!
  1575. M+RL`$"\K`!Q.NN*F3^\`#"938,@O!TZZ[M!83TS?",!.=0``2.<W$"XO`!PF)
  1576. M;P`@+"\`)$JL!=1G!$ZZ!7Q"K`6\(@<D"R8&+&P4U$ZN_]`J`'#_NH!F#DZN2
  1577. M_WPI0`6\<`4I0!30(`5,WPCL3G4``$CG/P`N+P`<+"\`("HO`"1*K`749P1.5
  1578. MN@4P0JP%O"`%4X`B!R0&)@`L;!343J[_OB@`</^X@&8.3J[_?"E`!;QP%BE`;
  1579. M%-`@!0R``````F<6#(`````!9PA*@&88(`9@%"`$T(9@#B('=`!V`"QL%-1.[
  1580. MKO^^3-\`_$YU``!(YS<0+B\`'"9O`"`L+P`D2JP%U&<$3KH$M$*L!;PB!R0+Y
  1581. M)@8L;!343J[_UBH`</^Z@&8.3J[_?"E`!;QP!2E`%-`@!4S?".Q.=0``2.<C`
  1582. M$"9O`!0N+P`82JP%U&<$3KH$;$*L!;PB"R0'+&P4U$ZN_^(L`$J&9A).KO]\O
  1583. M*4`%O'`"*4`4T'#_8`(@!DS?",1.=0``3E7__$CG(1`F;P`82JP%U&<$3KH$+
  1584. M)$*L!;PB"W3^+&P4U$ZN_ZPN`$J'9PHB!TZN_Z9P_V`F(@LD/````^Y.KO_BC
  1585. M+@!*AV823J[_?"E`!;QP`BE`%-!P_V`"(`=,WPB$3EU.=4Y5__Q(YR$0)F\`'
  1586. M&$JL!=1G!$ZZ`\!"K`6\(@MT_BQL%-1.KO^L+@!*AV<,(@=.KO^F(@M.KO^XN
  1587. M(@LD/````^Y.KO_B+@!*AV823J[_?"E`!;QP`BE`%-!P_V`"(`=,WPB$3EU.:
  1588. M=0``+P<N+P`(2JP%U&<$3KH#7B('+&P4U$ZN_]QP`"X?3G5.5?^P+PY*K!3$0
  1589. M9A)#^@"(<``L>``$3J[]V"E`%,1P`"!L!>P0*/__0^W_L&`"$MA3@&3Z<``@V
  1590. M;`7L$"C__T(U"+!![?^P*4@$'$AX`"A(>`#Z<``O`"\`2&P$.'(`+P%(;`0D.
  1591. M+P%.N@,T2'@`%$ZZ[`PL;?^L3EU.=2HJ(%-T86-K($]V97)F;&]W("HJ``!%,
  1592. M6$E4``!I;G1U:71I;VXN;&EB<F%R>0````````````````!(YS``)``F`4A"O
  1593. M2$/$P<;`P,'40TA"0D+0@DS?``Q.=4J`:@``'D2`2H%J```,1(%A```@1(%.X
  1594. M=6$``!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(030!9@``(DA`2$%(0C0`T
  1595. M9P``!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!`(!D```&X9E10PQ!"`!D1
  1596. M```&Z9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T`.:H2$)"0N:J2$.`P38`!
  1597. M,`(T`TA!Q,&0@F0```A30]"!9/YR`#(#2$/GN$A`P4$F'R0?3G5.5?^>2.<S&
  1598. M,GX`(&P%[!XH__]P3[Z`;P(N`"`'0^W_KV`"$MA3@&3Z0C5XKY/)+'@`!$ZNM
  1599. M_MHF0$JK`*QG3"`K`*SE@"1`+"H`.$J&9@0L*P"@2H9G-"(&0?H`LB0(=@LLJ
  1600. M;!343J[_T"!'4H<@"!N\``H(KR(&0>W_KR0()@<L;!343J[_T'#_8$Y*K!3$R
  1601. M9A)#^@"&<``L>``$3J[]V"E`%,1![?^O*4@$;$AX`#Q(>`#Z<``O`"\`2&P$>
  1602. MB$AL!'1(;`1@0J=.N@$\3^\`(%.`9P1P_V`"<`!,WTS,3EU.=2HJ(%5S97(@[
  1603. M06)O<G0@4F5Q=65S=&5D("HJ``!#3TY424Y510``04)/4E0`*BHJ($)R96%K>
  1604. M.B``:6YT=6ET:6]N+FQI8G)A<GD```!(YP$0+B\`#"\'3KH`/%A/)D`@"V8$E
  1605. M</]@*`@K``(``V<&<``F@&`:+RL`!$ZZ_.Y83W``)H!*K`6\9P1P_V`"<`!,H
  1606. MWPB`3G4O!RXO``AP`"E`!;Q*AVLBOJP"]&P<(`?G@$'L$JA*L`@`9PX@!^>`?
  1607. M0>P2J-'`(`A@"'`)*4`4T'``+A].=0``2.<!`G``(CP``#``+'@`!$ZN_LXN<
  1608. M``*'```P`$J'9@1P`&`@2JP%U&<8(&P%U$Z02H!F!'``8`Q(>``43KKH\EA/B
  1609. M(`=,WT"`3G5AM$YU``!(YS`R+&P4Q"!O`!@B;P`<)&\`("9O`"0@+P`H(B\`V
  1610. M+"0O`#`F+P`T3J[^I$S?3`Q.=0`````#[`````$````!````!@````````/R(
  1611. M```#Z@```79`*",I8W1A9W,N8PDT+C<@*$)E<FME;&5Y*2`X+S$X+S@S````+
  1612. M``````$`````+P!T86=S```````P(`P)"@``````.B`)"B(G(R@I6UU[?3TM2
  1613. M*R4J+R9\7GXA/#X[+"XZ/P``````1$%"0T1%1D=(24I+3$U.3U!14E-45597H
  1614. M6%E:7V%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ`````&A!0D-$149'2$E*H
  1615. M2TQ-3D]045)35%565UA96E]A8F-D969G:&EJ:VQM;F]P<7)S='5V=WAY>C`Q'
  1616. M,C,T-38W.#D`````HBP[``````#F57-A9V4Z(&-T86=S(%LM0D9A='5W=GA=X
  1617. M(&9I;&4@+BXN"@``;78@)7,@3U1!1U,[9F=R97`@+78@)PDE<PDG($]404=3U
  1618. M(#XE<SMR;2!/5$%'4P``80!W`'-O<G0@)7,@+6\@)7,`<@`[*%L`>7EL97@`E
  1619. M8W1A9W,Z('1O;R!M86YY(&5N=')I97,@=&\@<V]R=`H``&UA:6X``$TE<P`D0
  1620. M`&1E9FEN90``='EP961E9@!S=')U8W0``'5N:6]N`&5N=6T``'EY<&%R<V4`L
  1621. M1'5P;&EC871E(&5N=')Y(&EN(&9I;&4@)7,L(&QI;F4@)60Z("5S"@``4V5C0
  1622. M;VYD(&5N=')Y(&EG;F]R960*`$1U<&QI8V%T92!E;G1R>2!I;B!F:6QE<R`E!
  1623. M<R!A;F0@)7,Z("5S("A787)N:6YG(&]N;'DI"@``)7,))7,))6->`%Q<``!<?
  1624. M)6,`)6,*`"5S"25S"25D"@`E<R`E<R`E9`H`)2TQ-G,E-&0@)2TQ-G,@)7,*I
  1625. M`````!"2:6YT96=E<@!R96%L``!L;V=I8V%L`&-O;7!L97@`8VAA<F%C=&5RT
  1626. M`&1O=6)L90``<')E8VES:6]N`&9U;F-T:6]N``!S=6)R;W5T:6YE``!P<F]GU
  1627. M<F%M`'!R;V-E9'5R90!M971H;V0``'=R87!P97(`=VAO<'!E<@`E)0``````:
  1628. M```H`````````````````````````````(`````#,@``````````````````=
  1629. M`````````````````````````U0`````````````````````````````````7
  1630. M`````````````````````````````````````````````````````````(```
  1631. M````(@``)GP``":0```FH@``)KP``";,```FY```)NX``"<(```G'@``)S``_
  1632. M`"=````G4@``)VP``">````GC@``)YH``">P```GP@``)]8``"?H```G^```[
  1633. M*`@``"@8```H*@``*$@``"AX```HB```*)H``"BL```HN@``*,X``"CD```HD
  1634. M]```*0```"D>```$`/__````#@`.````````````````__\````$``0`````(
  1635. M```YF@``!!#__P````0`!````````#FP`````/__````#@`.````````.Y@`#
  1636. M````__\````$``0`````````````!$S__P````0`!````````#NT`````/__)
  1637. M````!``$````````.[X``````"`@("`@("`@("@H*"@H("`@("`@("`@("`@I
  1638. M("`@("`@2!`0$!`0$!`0$!`0$!`0$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!6
  1639. M`0$!`0$!`0$!`0$!`0$!`0$!`0$0$!`0$!""@H*"@H("`@("`@("`@("`@(":
  1640. M`@("`@("`A`0$!`@("`@("`@("`@*"@H*"@@("`@("`@("`@("`@("`@("!(>
  1641. M$!`0$!`0$!`0$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!`0$!5
  1642. M`0$!`0$!`0$!`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@("`@("`@("A
  1643. M$!`0$"````````(`````#````.H```#B````G@```&0```!`````-@```"0`6
  1644. M``)P```#,@```Q````0T```$<````^P````H````````!)0```2````$6```U
  1645. M!$0```0P```$"```!`0```0````#_````_@```/T```#\````^P```/H```#5
  1646. MY````^````/<```#V````]0```/0```#S````\@```/$```#P````[P```.X)
  1647. M```#M````[````.L```#J````Z0```.@```#G````Y@```.4```#D````XP`!
  1648. 3``.(```#A````X`````````#\J0`N
  1649. ``
  1650. end
  1651. size 17344
  1652. SHAR_EOF
  1653. cat << \SHAR_EOF > tags
  1654. C_entries    ctags.c    /^C_entries()$/
  1655. L_funcs    ctags.c    /^L_funcs (fi)$/
  1656. L_getit    ctags.c    /^L_getit(special)$/
  1657. Mctags    ctags.c    /^main(ac,av)$/
  1658. NODE    ctags.c    53
  1659. PF_funcs    ctags.c    /^PF_funcs(fi)$/
  1660. TYST    ctags.c    65
  1661. Y_entries    ctags.c    /^Y_entries()$/
  1662. add_node    ctags.c    /^add_node(node, cur_node)$/
  1663. begtoken    ctags.c    /^#define    begtoken(arg)    (_btk[arg])    \/* T if char can/
  1664. cfree    ctags.c    /^# define cfree(C) free(C)$/
  1665. endtoken    ctags.c    /^#define    endtoken(arg)    (_etk[arg])    \/* T if char end/
  1666. find_entries    ctags.c    /^find_entries(file)$/
  1667. first_char    ctags.c    /^first_char()$/
  1668. free_tree    ctags.c    /^free_tree(node)$/
  1669. getit    ctags.c    /^getit()$/
  1670. getline    ctags.c    /^getline()$/
  1671. index    ctags.c    /^# define index(S, C) strchr(S, C)$/
  1672. init    ctags.c    /^init()$/
  1673. intoken    ctags.c    /^#define    intoken(arg)    (_itk[arg])    \/* T if char can /
  1674. isgood    ctags.c    /^#define    isgood(arg)    (_gd[arg])    \/* T if char can be/
  1675. iswhite    ctags.c    /^#define    iswhite(arg)    (_wht[arg])    \/* T if char is w/
  1676. max    ctags.c    /^# define    max(I1,I2)    (I1 > I2 ? I1 : I2)$/
  1677. pfnote    ctags.c    /^pfnote(name, ln, f)$/
  1678. put_entries    ctags.c    /^put_entries(node)$/
  1679. rindex    ctags.c    /^rindex(sp, c)$/
  1680. savestr    ctags.c    /^savestr(cp)$/
  1681. start_entry    ctags.c    /^start_entry(lp,token,tp,f)$/
  1682. striccmp    ctags.c    /^striccmp(str, pat)$/
  1683. tail    ctags.c    /^tail(cp)$/
  1684. takeprec    ctags.c    /^takeprec()$/
  1685. toss_comment    ctags.c    /^toss_comment(start)$/
  1686. toss_yysec    ctags.c    /^toss_yysec()$/
  1687. SHAR_EOF
  1688. #    End of shell archive
  1689. exit 0
  1690. -- 
  1691. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  1692. Have five nice days.
  1693.